define(['layer', 'drawingManager', 'mapEcharts', 'slimscroll'], function (layer, drawingManager, mapEcharts, PerfectScrollbar) {
    return {
        init: function () {
            load();//加载地图
            mapEcharts.init();
            $('.map-time').html(pattern('yyyy-MM-dd EEE'));
            //绘制区域
            $(".draw-polygon").on('click', function () {
                $(".draw-translation").removeClass('active')
                $(this).addClass('active')
                drawArea();
            })
            //取消绘制
            $(".draw-translation").on('click', function () {
                $(".draw-polygon").removeClass('active')
                $(this).addClass('active')
                cancelDrawArea();
            })
            $('.search').on('click', function () {
                //删除已绘制的区域
                map.removeOverlay(overlay);//每次只能添加一个
                //var city= mapEcharts.getSelectVal($('select[name="city"]'));
                area = mapEcharts.getSelectVal($('select[name="county"]'));
                map.removeOverlay(polygon);
                if (area != "") {
                    //查询时移除所有的标注
                    $.each(pointMarker, function (index, obj) {
                        map.removeOverlay(obj);
                    })
                    //清空所有标注的集合
                    pointMarker = [];
                    $(".draw-translation").click();
                    $.ajax({
                        url: "/positionAreaController/findByName",
                        dataType: "json",
                        type: "post",
                        async: false,
                        data: {
                            'name': area
                        },
                        success: function (result) {
                            var data = result.data;
                            var point = data.center.split(',');
                            var point = new BMap.Point(point[0], point[1]); //设置地图中心点
                            map.centerAndZoom(point, data.lv);
                            polygon = new BMap.Polygon(data.boundary, {
                                strokeColor: "#f5e106",
                                fillColor: "",
                                strokeWeight: 3,
                                strokeOpacity: 0,
                                fillOpacity: 0,
                            });
                            map.addOverlay(polygon);
                        }
                    })
                }
                else {
                    refreshMap("");
                }

                //查询对应的类型、通知人、人员编号
                getPositionNowList();

            });
            new PerfectScrollbar('.popup-box', {
                wheelSpeed: 2,
                wheelPropagation: true,
                minScrollbarLength: 20,
                suppressScrollX: true,
            });
            new PerfectScrollbar('.message-scroll', {
                wheelSpeed: 2,
                wheelPropagation: true,
                minScrollbarLength: 20,
                suppressScrollX: true,
            });
            /**tab*/
            $('.contrailTab').on('click', 'li', function (e) {
                $(this).addClass('active').siblings().removeClass("active");
                $('.contrail-box').find('.contrail_iframe').attr('src', $(this).data('type') + "?phoneNum=" + $("#input_phoneNum").val() + "&time=" + $("#input_time").val());
                $('.contrail-box>div').eq(Number($(this).index())).show().siblings().hide();
            });
            /**人员列表*/
            $('.codeList').on('click', 'tr', function () {
                $(this).addClass('active').siblings().removeClass("active");
                $("#input_phoneNum").val($(this).attr('phoneNum'));
                $("#input_time").val($(this).attr('time'));
                setPeopleInfo();
                $('.contrail-tab li:first-child').addClass('active').siblings().removeClass("active");
                $('.contrail-box').find('.contrail_iframe').removeAttr('src').attr('src', $('.contrail-tab').find('.active').data('type') + "?phoneNum=" + $("#input_phoneNum").val() + "&time=" + $("#input_time").val());
            });
            /*画像信息*/
            $('.retract').on('click',function () {
                if($(this).children().hasClass('fa-angle-double-up')){
                    $(this).children().removeClass('fa-angle-double-up').addClass('fa-angle-double-down');
                    $('.essential').slideUp(500);
                }else {
                    $(this).children().removeClass('fa-angle-double-down').addClass('fa-angle-double-up');
                    $('.essential').slideDown(500);
                }
            })
        }
    };
})
var area;
var polygon;//切换地址的区域
var map;//地图
var drawingManager;//绘制区域
var overlay //绘制之后的区域

/**
 * 不同查询之后重新定位
 */
function refreshMap(setPoint) {
    if (setPoint == "") {
        var point = new BMap.Point(106.63543, 26.651516); //设置地图中心点
        map.centerAndZoom(point, 11);
    }
    else {
        map.centerAndZoom(setPoint, 13);
    }
}

/**
 * 初始化加载
 */
function load() {
    map = new BMap.Map("map", {enableMapClick: false}); //初始化地图
    refreshMap("");
    map.enableScrollWheelZoom();//启动滚动缩进
    map.disableDoubleClickZoom()//禁用双击放大
    getPositionNowList();//按照条件进行查询出对应的人员最新的数据-
    //设置地图的样式
    var mapStyle = {
        features: ["road", "building", "water", "land"],//隐藏地图上的poi
        style: "midnight"
    }
    //设置地图的样式
    map.setMapStyle(mapStyle);
    var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角，添加比例尺
    // var top_left_navigation = new BMap.NavigationControl({
    //     anchor: BMAP_ANCHOR_TOP_LEFT,
    //     offset: new BMap.Size(280, 130)
    // });  //左上角，添加默认缩放平移控件
    map.addControl(top_left_control);      // 测距离的
    //map.addControl(top_left_navigation);   // 左导航默认
    $('.enlarge').on('click',function(){
        map.zoomTo(map.getZoom() + 1);
    });
    $('.diminish').on('click',function(){
        map.zoomTo(map.getZoom() - 1);
    });
    var styleOptions = {
        strokeColor: "#00F5FF", //边线颜色。
        fillColor: "#00F5FF", //填充颜色。当参数为空时，圆形将没有填充效果。
        strokeWeight: 3, //边线的宽度，以像素为单位。
        strokeOpacity: 0.8, //边线透明度，取值范围0 - 1。
        fillOpacity: 0.6, //填充的透明度，取值范围0 - 1。
        strokeStyle: 'solid' //边线的样式，solid或dashed。
    };
    //实例化鼠标绘制工具
    drawingManager = new BMapLib.DrawingManager(map, {
        isOpen: false, //是否开启绘制模式
        enableDrawingTool: false, //是否显示工具栏
        drawingToolOptions: {
            anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
            offset: new BMap.Size(320, 130), //偏离值
            scale: 0.8,
            drawingModes: [
                BMAP_DRAWING_POLYGON]//多边形
        },
        polygonOptions: styleOptions
        //多边形的样式
    });
    //添加鼠标绘制工具监听事件，用于获取绘制结果
    drawingManager.addEventListener('overlaycomplete', function (e) {
        //绘制之后的区域放入数组，方便后续清理
        overlay = e.overlay
        //给绘制的多边形添加点击事件
        e.overlay.addEventListener('click', function () {
            submitData = {
                "geo": JSON.stringify(e.overlay.getPath()), "geotype": e.drawingMode,
                "type": $("select[name='category']").val(),//类型
                "noticePeople": $('#alertOthers').val(),//通知人
                "code": $('#phoneNum').val()//人员编码
            };
            $.ajax({
                url: "/map/isPtInPoly",
                dataType: "json",
                type: "post",
                data: submitData,
                success: function (result) {

                    var data = result.data;
                    if (data.length > 0) {
                        openInfo(data, true);//多项
                    }
                }
            })
        })
    })
}

/**
 * 绘制区域
 */
function drawArea() {
    map.removeOverlay(overlay);//每次只能添加一个
    drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);
    drawingManager.open();
}

/**
 * 取消绘制区域
 */
function cancelDrawArea() {
    map.removeOverlay(overlay);//每次只能添加一个
    drawingManager.close();
}

/**
 * 设置人员的信息
 */
function setPeopleInfo() {
    $.ajax({
        url: "/map/getPositionNowList",
        dataType: "json",
        type: "post",
        async: false,
        data: {
            "phoneNum": $('#input_phoneNum').val()//人员编码
        },
        success: function (result) {
            var data = result.data;
            $.each(data, function (index, obj) {
                $(".show_code").text(obj.code);
                $("#show_noticePeople").text(obj.noticePeople);
                $("#show_timeStart").text(obj.timeStart.substr(0, 10));
                $("#show_type").text(obj.type);
                $("#show_noticePhone").text(obj.noticePhone);
                $("#show_controlTime").text(obj.controlTime + " (天)");
                $("#show_position").text(obj.lng + ";" + obj.lat);
                $("#show_attentionTime").text(obj.attentionTime + " (天)");
            })

        }
    })
}

/**
 * 点击单个或多项人员的画像
 * @param objs
 * @param isMultiple 是否多项
 */
function openInfo(objs, isMultiple) {
    if (!isMultiple) {
        $('.popup-left').hide();
        $('.popup-right').css('width', '100%');
        $("#input_phoneNum").val(objs.split(',')[0]);
        $("#input_time").val(objs.split(',')[1]);
        setPeopleInfo();
    }
    else {//多项
        $('.popup-left').show();
        $('.popup-right').css('width', '80%');
        $('.codeList').html("");
        $.each(objs, function (index, obj) {
            $('.codeList').append("<tr class='item' phoneNum='" + obj.phoneNum + "' time='" + obj.time + "'><td >" + obj.code + " </td><td> " + obj.attentionTime + "</td ></tr>");
            if (index == 0) {
                $("#input_phoneNum").val(obj.phoneNum);
                $("#input_time").val(obj.time);
                $('.codeList').find(".item").eq(index).addClass("active")
                setPeopleInfo();
            }

        })
        $('.mark').text(objs.length);
    }
    ;
    layer.open({
        type: 1,
        title: false,
        anim: 1,
        closeBtn: 1,
        maxmin: true,
        shadeClose: true,
        shade: 0.7,
        zIndex: 80,
        area: ['80%', '80%'],
        content: $('#popup'),
        success: function () {
            $('.contrail-tab li:first-child').addClass('active').siblings().removeClass("active");
            $('.contrail-box').find('.contrail_iframe').removeAttr('src').attr('src', $('.contrail-tab').find('.active').data('type') + "?phoneNum=" + $("#input_phoneNum").val() + "&time=" + $("#input_time").val());
            $('.search').blur();
        },
        full: function () {
            $('.layui-layer-close').hide();
        },
        restore: function () {
            $('.layui-layer-close').show();
        }
    });
}

/**
 *通过从后台获取最新人员坐标添加标注
 */
function getPositionNowList() {
    $.ajax({
        url: "/map/getPositionNowList",
        dataType: "json",
        type: "post",
        async: false,
        data: {
            "area": area,//区域
            "type": $('.category').val(),//类型
            "noticePeople": $('#alertOthers').val(),//通知人
            "code": $('#code').val()//人员编码
        },
        success: function (result) {
            var data = result.data;

            addMarker(data);
        }
    })
}

/**
 *通过坐标在地图上添加标注
 * @param data
 */
var pointMarker = [];

function addMarker(data) {
//点击标注弹出人员信息（）
    var opts = {
        width: 100,     // 信息窗口宽度
        height: 50,     // 信息窗口高度
        enableMessage: true,//设置允许信息窗发送短息
    }
    //设置总体关注人员
    if ($('.person-number').text() == "0") {
        $('.person-number').text(data.length)
    }
    //判断输入单个人时候
    if ($('#code').val() != "") {
        if (pointMarker.length > 0) {
            $.each(data, function (i, obj) {
                $.each(pointMarker, function (index, markerobj) {
                    if (obj.code == markerobj.getTitle()) {
                        refreshMap(markerobj.point);
                        var infoWindow = new BMap.InfoWindow("<div>人员编号：" + obj.code + "</div><div>人员类型：" + obj.type + "</div><div style='text-align: right'><a data-info=" + obj.phoneNum + ',' + obj.time + " class='openinfo' >详细</a></div>", opts);  // 创建信息窗口对象
                        map.openInfoWindow(infoWindow, markerobj.point); //开启信息窗口
                        $('.openinfo').on('click', function (e) {
                            openInfo($(this).data('info'), false);
                        })
                    }
                })
            })
        }
    } else {
        map.closeInfoWindow();
        //查询时移除所有的标注
        $.each(pointMarker, function (index, obj) {
            map.removeOverlay(obj);
        })
        //清空所有标注的集合
        pointMarker = [];

        $.each(data, function (index, obj) {
            var point = new BMap.Point(obj.lng, obj.lat);
            var marker;
            marker = new BMap.Marker(point, {
                icon: new BMap.Icon("images/icon/" + obj.type + ".png", new BMap.Size(24, 24))
            });
            var infoWindow = new BMap.InfoWindow("<div>人员编号：" + obj.code + "</div><div>人员类型：" + obj.type + "</div><div style='text-align: right'><a data-info=" + obj.phoneNum + ',' + obj.time + " class='openinfo' >详细</a></div>", opts);  // 创建信息窗口对象
            marker.setTitle(obj.code);
            marker.addEventListener("click", function () {
                map.openInfoWindow(infoWindow, point); //开启信息窗口
                $('.openinfo').on('click', function (e) {
                    openInfo($(this).data('info'), false);
                })

            });
            map.addOverlay(marker);
            //添加所有标注
            pointMarker.push(marker);
            //marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
        })
    }
}


/**以上为地图代码片段**/
//定义时间格式
function pattern(fmt) {
    var time = new Date();
    var o = {"M+": time.getMonth() + 1, //月份
    "d+": time.getDate(), //日
    "h+": time.getHours() % 12 == 0 ? 12 : time.getHours() % 12, //小时
    "H+": time.getHours(), //小时
    "m+": time.getMinutes(), //分
    "s+": time.getSeconds(), //秒
    "q+": Math.floor((time.getMonth() + 3) / 3), //季度
    "S": time.getMilliseconds() //毫秒
    };
    var week = {"0": "星期日", "1": "星期一", "2": "星期二", "3": "星期三", "4": "星期四", "5": "星期五", "6": "星期六"};
    if (/(y+)/.test(fmt)) {fmt = fmt.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length));}
    if (/(E+)/.test(fmt)) {fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "" : "") : "") + week[time.getDay() + ""]);}
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    return fmt;
}


